package io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 * 对象流:
 * java.io.objectInputStream和objectOutputStream
 *
 * 对象流是 一对高级流，在流链接中的作用是进行对象序列化与反序列化。
 * 对象序列化:将一个java对象按照其结构转换为一组字节的过程。
 *
 * 使用Person类测试对象流的对象读写操作.
 */
public class OOSDemo {
    public static void main(String[] args) throws IOException {
        /** 对象流: */
        /** objectInputStream | objectOutputStream
         *          对象序列化 与 反序列化
         *   按照其结构转换为一组字节的过程。
         */
        //讲一个Person实例写入person.obj中

        String name = "六花";
        int age = 16;
        String gender = "♀";
        String[] info = {"邪王真眼","来自日本","粉丝众多","尤里"};
        Person p = new Person(name,age,gender,info);
        System.out.println(p);

        FileOutputStream fos = new FileOutputStream("person.obj");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        /** writeObject() 对象序列化 */
        /*
            对象输出流在进行对象序列化时要求该对象所属的类必须实现可序列化接口,
            否则会抛出异常：NotSerializableException. -> 读写的对象类没有序列化
            序列化接口:java.io.Serializable.
         */
        oos.writeObject(p);
        System.out.println("输出完毕!");
        oos.close();
    }
}
